package santeclair.referentiel.optique.referentiel.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import santeclair.lunar.framework.dao.jpa.exception.JpaExceptionHelper;
import santeclair.lunar.framework.dao.jpa.impl.FwkCodeJpaDAO;
import santeclair.referentiel.optique.config.Constant;
import santeclair.referentiel.optique.model.TraitementGrille;
import santeclair.referentiel.optique.referentiel.dao.TraitementGrilleDAO;

@Repository
public class TraitementGrilleDAOImpl extends FwkCodeJpaDAO<TraitementGrille, String> implements TraitementGrilleDAO {

    @PersistenceContext(unitName = Constant.PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    @Override
    public Class<TraitementGrille> getEntityClass() {
        return TraitementGrille.class;
    }

    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    @Override
    public TraitementGrille findFetchTraitementGrilleByCode(String codeTraitementGrille) {
        StringBuffer sbf = new StringBuffer();
        sbf.append("SELECT traitementGrille ");
        sbf.append("FROM TraitementGrille as traitementGrille ");
        sbf.append("    LEFT JOIN FETCH traitementGrille.traitementVerre as trtVerre ");
        sbf.append("WHERE traitementGrille.codeTraitementGrille = :codeTraitementGrille ");
        TypedQuery<TraitementGrille> query = null;
        try {
            query = em.createQuery(sbf.toString(), TraitementGrille.class);

            query.setParameter("codeTraitementGrille", codeTraitementGrille);

            return query.getSingleResult();
        } catch (Exception e) {
            throw JpaExceptionHelper.addQueryInformation(sbf.toString(), query, e, RuntimeException.class);
        }

    }

}
